package com.hb.core.pojo.project.proj.mapper;

import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hb.core.pojo.project.proj.entity.AbstractProject;
import com.hb.core.pojo.project.proj.entity.BidProject;
import com.hb.core.pojo.project.proj.entity.InquiryThanProject;
import com.hb.core.pojo.project.proj.entity.QueryProject;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 项目信息表 Mapper 接口
 * </p>
 *
 * @author zhaojk
 * @since 2021-08-30
 */
public interface ProjectMapper extends BaseMapper<AbstractProject> {

    /**
     * 获取指定的询比价项目
     *
     * @param projectId
     * @return
     * @deprecated 不便于获取所有字段信息
     */
    @Deprecated
    InquiryThanProject findInquiryPurchaseTypeProjectById(@Param("projectId") String projectId);

    /**
     * 查询项目列表
     *
     * @param pages
     * @param query
     * @return
     */
    Page<AbstractProject> projectPages(IPage<AbstractProject> pages, @Param("query") QueryProject query);

    /**
     * 查询指定主键ID的项目信息
     *
     * @param selectFields 需要查询的字段, 为null或者size为0时查询所有
     * @param projectId
     * @return
     */
    JSONObject getProjectByPrimaryKey(@Param("selects") List<String> selectFields, @Param("id") Long projectId);

    /**
     * 更新项目信息
     *
     * @param projectId
     * @param updateMap
     * @return
     */
    int updateProjectById(@Param("id") Long projectId, @Param("project") Map<String, Object> updateMap);

    /**
     * 新增项目信息
     *
     * @param id
     * @param updateMap
     * @return
     */
    int insertProject(@Param("id") Long id, @Param("project") Map<String, Object> updateMap);

    /**
     * 编辑公告 更新项目信息
     *
     * @param project
     */
    int updateNoticeProjcetRelevant(AbstractProject project);

    /**
     * 判断是否是邀请投标
     *
     * @param id
     * @return
     */
    @Select("select common_type from trade_project where id = #{id}")
    Integer invitationFlag(@Param("id") Long id);

    /**
     * 判断是否需要报名
     *
     * @param id
     * @return
     */
    @Select("select sign_up_flag from trade_project where id = #{id}")
    Integer signUpFlag(@Param("id") Long id);

    /**
     * 查询是否评审
     *
     * @param id
     */
    @Select("select review_flag from trade_project where id = #{id}")
    Integer findReviewFlag(String id);

    /**
     * 根据项目Id查询项目信息
     *
     * @param id
     * @return
     */
    BidProject getBidProjectById(Long id);

    /**
     * 根据标段Id查询项目信息
     *
     * @param sectionId
     * @return
     */
    AbstractProject getProjectBySectionId(@Param("sectionId") Long sectionId);
    /**
     *
     * @Description: 查询未推送过的项目列表
     * @Author: zhongdl
     * @Date:2022/2/17 15:38

     * @return: {@link List< ProjectAllFieldsDTO> }
     **/
    List<AbstractProject> listProjectAllFieldsDTO();
    /**
     *
     * @Description: 获得最大的招标项目编号
     * @Author: zhongdl
     * @Date:2022/2/21 11:30
     * @return: {@link Integer }
     **/
    Integer getMaxCodeNew();
}
